import java.util.Scanner;

// 分别处理【相同数位上的两数之和 val1 + val2，并加上上一轮新产生的进位值 carry：sum = val1 + val2 + carry】 与 【这一轮新产生的进位值 carry = carry / 10】。
// 并且当两链表 l1 和 l2 都遍历完后，记得额外处理最后的一次进位。例如：99+9=108，这里需要单独处理百位最后的1。  
public class addTwoNumbers {
    public static class ListNode {
        int val;
        ListNode next;
        ListNode() {}
        ListNode(int val) { this.val = val; }
        ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    }
    
    public static ListNode addTwoNumbersm(ListNode l1, ListNode l2) {
        // 创建一个虚拟头节点
        ListNode dummyHead = new ListNode(0);
        // 创建一个当前节点
        ListNode curr = dummyHead;
        ListNode p = l1, q = l2;
        // 创建一个进位
        int carry = 0;
        // 遍历两个链表
        while(p != null || q != null){
            // 获取两个链表的值
            int x = (p != null) ? p.val : 0;
            int y = (q != null) ? q.val : 0;
            // 计算两个链表的和
            int sum = x + y + carry;
            // 更新进位
            carry = sum / 10;
            // 创建一个新节点
            curr.next = new ListNode(sum % 10);
            // 更新当前节点
            curr = curr.next;
            // 更新p和q
            if(p != null) p = p.next;
            if(q != null) q = q.next;
        }
        // 如果最后一位有进位
        if(carry > 0){
            // 创建一个新节点
            curr.next = new ListNode(carry);
        }
        // 返回虚拟头节点的下一个节点
        return dummyHead.next;
    }
    public static void main(String[] args) {
        // 输入
        Scanner sc = new Scanner(System.in);
        // 输入第一个链表
        String s = sc.nextLine();
        // 按照空格分割
        String[] s1 = s.split(" ");
        // 创建第一个链表
        ListNode l1 = new ListNode(Integer.parseInt(s1[0]));
        ListNode p = l1;
        for(int i = 1; i < s1.length; i++){
            // 创建一个新节点
            p.next = new ListNode(Integer.parseInt(s1[i]));
            // 更新当前节点
            p = p.next;
        }
        // 输入第二个链表
        String s2 = sc.nextLine();
        // 按照空格进行分割
        String[] s3 = s2.split(" ");
        // 创建第二个链表
        ListNode l2 = new ListNode(Integer.parseInt(s3[0]));
        ListNode q = l2;
        for(int i = 1; i < s3.length; i++){
            // 创建一个新节点
            q.next = new ListNode(Integer.parseInt(s3[i]));
            // 更新当前节点
            q = q.next;
        }
        // 调用addTwoNumbers方法
        ListNode result = addTwoNumbersm(l1, l2);
        // 输出结果
        while(result != null){
            System.out.print(result.val + " ");
            result = result.next;
        }
        // 关闭Scanner
        sc.close();
    }
}